Fix save/restore bug; further rationalization of xenbus state machine
authorsmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Wed, 29 Mar 2006 17:06:27 +0000 (18:06 +0100)
committersmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Wed, 29 Mar 2006 17:06:27 +0000 (18:06 +0100)
logic deferred until post 3.0.2.

Signed-off-by: Steven Hand <steven@xensource.com>
linux-2.6-xen-sparse/drivers/xen/blkback/xenbus.c

index 82625a97157abf697b8e4abb3f0cc0bfbaeba24d..23fe51a36289c6913298b1ecef0822b244788e70 100644 (file)
@@ -253,15 +253,20 @@ static void frontend_changed(struct xenbus_device *dev,
 
        switch (frontend_state) {
        case XenbusStateInitialising:
-       case XenbusStateConnected:
                break;
 
        case XenbusStateInitialised:
+       case XenbusStateConnected:
+               /* Ensure we connect even when two watches fire in 
+                  close successsion and we miss the intermediate value 
+                  of frontend_state. */
+               if (dev->state == XenbusStateConnected)
+                       break;
+
                err = connect_ring(be);
-               if (err) {
-                       return;
-               }
-               update_blkif_status(be->blkif); 
+               if (err)
+                       break;
+               update_blkif_status(be->blkif);
                break;
 
        case XenbusStateClosing: